package echec;

import java.util.HashSet;
import java.util.Set;

public class Trajectoire {
	/**
	 * 
	 * @param pDepart
	 * @param pArrivee
	 * @return
	 */
	public static Set<Position> makePositionAlignees(Position pDepart, Position pArrivee) {//throws TrajectoireInvalideException
		{
			if (!Mouvement.mouvementVertical(pDepart, pArrivee)
					&& !Mouvement.mouvementHorizontal(pDepart, pArrivee)
					&& !Mouvement.mouvementDiagonal(pDepart, pArrivee))
			{
				//throw new TrajectoireInvalideException();
			}
			Set<Position> setPositions = new HashSet<Position>();
			int iPasVertical = pArrivee.getLigne() - pDepart.getLigne()> 0 ? 1 : -1;
			int iPasHorizontal = pArrivee.getColonne() - pDepart.getColonne() > 0 ? 1 : -1;
			if (pArrivee.getLigne() - pDepart.getLigne() == 0) iPasVertical = 0;
			if (pArrivee.getColonne() - pDepart.getColonne() == 0) iPasHorizontal = 0;
			int uLigneDebut   = pDepart.getLigne() + iPasVertical;
			int uColonneDebut = pDepart.getColonne() + iPasHorizontal;
			//int uLigneFin     = caseArrive.getPosition().getLigne()   - iPasVertical;
			//int uColonneFin   = caseArrive.getPosition().getColonne() - iPasHorizontal;
			/*System.out.println("--------- Trajectoire variables -----------\n");
System.out.println("lignedeb : "+uLigneDebut +"\t colonnedeb :"+uColonneDebut+"\n");
System.out.println("lignefin : "+uLigneFin +"\t colonnefin :"+uColonneFin+"\n");
System.out.println("-------------------------------------------\n");*/
			//MVT DIAGONAL
			if (Mouvement.mouvementDiagonal(pDepart, pArrivee))
			{
				//System.out.println("--------- Trajectoire Diagonal -----------\n");
				for (
						int uLigne  = uLigneDebut,  uColonne  = uColonneDebut;
						uLigne != pArrivee.getLigne() &&  uColonne != pArrivee.getColonne();
						uLigne += iPasVertical, uColonne += iPasHorizontal
				){
					//System.out.println("ligne : "+uLigne +"\t colonne :"+uColonne+"\n");
					setPositions.add(new Position(uLigne, uColonne));
				}
			}else if (Mouvement.mouvementHorizontal(pDepart, pArrivee))
			{// MVT HORIZONTAL
				//System.out.println("--------- Trajectoire Horizontal -----------\n");
				int uLigne  = uLigneDebut;
				for (
						int  uColonne  = uColonneDebut;
						uColonne != pArrivee.getColonne();
						uColonne += iPasHorizontal
				){
					//System.out.println("ligne : "+uLigne +"\t colonne :"+uColonne+"\n");
					setPositions.add(new Position(uLigne, uColonne));
				}
			}else if (Mouvement.mouvementVertical(pDepart, pArrivee))
			{// MVT VERTICAL
				//System.out.println("--------- Trajectoire Vertical-----------\n");
				int uColonne  = uColonneDebut;
				for (
						int uLigne  = uLigneDebut;
						uLigne != pArrivee.getLigne();
						uLigne += iPasVertical
				){
					//System.out.println("ligne : "+uLigne +"\t colonne :"+uColonne+"\n");
					setPositions.add(new Position(uLigne, uColonne));
				}
				
			}
			//System.out.println("--------------------------------\n");
			return setPositions;
		}
	}
}
